
/**
 * 获取10000以内所有的回文字符串
 * 
 */

/**
 * 
 * @description 先把数字转字符在转数组，转数组 反转后进行比较
 */
const palindrome1 = (num: number) => {
    if (num <= 0) return []
    const arr = []
    for (let i = 0; i < num; i++) {
        const str = i.toString();
        const reverse = str.toString().split('').reverse().join('')
        if (str === reverse) {
            arr.push(i)
        }
    }

    return arr
}

/**
 * 
 * @description 使用前后指针对比
 */

const palindrome2 = (num: number) => {
    if (num <= 0) return []
    const arr = []
    for (let i = 0; i < num; i++) {
        const iarr = i.toString().split('')
        let left = 0
        let right = iarr.length - 1
        while (left < right) {
            console.log(left, right)
            if (iarr[left] === iarr[right]) {
                arr.push(i)
                left++
                right--
            } else {
                break
            }
        }
    }

    return arr
}

/**
 * 
 * @description 操作直接获取反转后的数字进行对比
 * 
 */

const palindrome3 = (num: number) => {
    if (num <= 0) return []
    const arr = []
    for (let i = 0; i < num; i++) {
        let aaa = i
        let reversed = 0;
        while (aaa !== 0) {
            // 取出num的最后一位数字
            const digit = aaa % 10;
            // 将最后一位数字加到reversed的末尾
            reversed = reversed * 10 + digit;
            // 去掉num的最后一位数字
            aaa = Math.trunc(aaa / 10); // 使用Math.trunc确保取整数部分
        }
        if(i === reversed){
            arr.push(i)
        }
    }

    return arr
}

console.log(palindrome3(1000))